#pragma once
#include "RenderObject.h"
#include "../Core/Base.hpp"
#include "../Tool/MathUtil.h"
#include "../GameObject/Camera.h"
namespace Kriko
{
	class RenderAPI
	{
	public:
		enum class API
		{
			NONE = 0,
			OPENGL = 1,
		};
	public:
		virtual ~RenderAPI() = default;

		virtual void Init() = 0;
		virtual void SetViewport(uint32_t p_x, uint32_t p_y, uint32_t p_width, uint32_t p_height) = 0;
		virtual void SetClearColor(const glm::vec4& p_color) = 0;
		virtual void SetRenderObject(RenderObject* renderObject) = 0;
		virtual void SetCamera(Camera* p_camera) = 0;
		virtual int SetFrameBufferSize(size_t width, size_t height) = 0;
		virtual int FrameBufferRender() = 0;
		virtual void Render() = 0;
		virtual void Clear() = 0;

		static glm::vec4 GetClearColor() { return {0.443f, 0.67f, 0.859f, 1}; }
		static API GetAPI() { return s_API; }
		static Scope<RenderAPI> Create();
	private:
		static API s_API;
	};
}